package util;

import main.Propriedades;

public class Util {
	
	private static final Propriedades propriedades = new Propriedades();
	public static final int BLOCOS = propriedades.getBlocos();                // número de blocos no arquivo
	public static final double MI = propriedades.getMi();                     // taxa de upload dos peers e seeds
	public static final double U = propriedades.getU();                       // taxa de upload do publisher
	public static final double GAMA = propriedades.getGama();                 // taxa de permanência de um seed
	public static final int N0 = propriedades.getPopulacaoInicial();          // população inicial
	public static final double P = propriedades.getP();                       // probabilidade de um usuário novo entrar no sistema
	
	public static final double LAMBDA = propriedades.getLambda();             // taxa de chegada de peers 
	
	public static final String NOME_ARQUIVO = propriedades.getNomeArquivo();
	public static final String NOME_ARQUIVO_DEBUG = propriedades.getNomeArquivoDebug();
	public static final boolean DEBUG_CONSOLE = propriedades.getDebugConsole();
	
	public static final String METRICA = propriedades.getMetrica();
	public static final double TOTAL_VERIFICACOES = propriedades.getTotalVerificacoes();
	public static final double INCLINACAO_MINIMA = propriedades.getInclinacaoMinima();
	
	public static final int BLOCOS_INICIAIS_SISTEMA = propriedades.getBlocosIniciaisSistema();
	
	public static final int COLETAS_POR_RODADA = propriedades.getColetasPorRodada();
	
	public static final String METRICA_FASE_TRANSIENTE_NUMERO_USUARIOS = "numero-usuarios";
	
	public static final String METRICA_FASE_TRANSIENTE_TEMPO_DOWNLOAD = "tempo-download";
	
	public static final String POLITICA_SELECAO_VIZINHOS = propriedades.getPoliticaVizinhos();
	
	public static final String POLITICA_SELECAO_BLOCOS = propriedades.getPoliticaBlocos();
	
	public static final String POLITICA_SELECAO_VIZINHOS_RANDOMICA = "randomica";
	
	public static final String POLITICA_SELECAO_BLOCOS_RANDOMICA_UTIL = "randomica-util";
	
	public static final String POLITICA_SELECAO_BLOCOS_MAIS_RARO_UTIL = "mais-raro-util";
	
	public static final Object POLITICA_SELECAO_VIZINHOS_POR_GRUPOS = "por-grupos";
	
	public static final String GRAFICOS_DIRETORIO = propriedades.getDiretorioGraficos();
	public static final String GRAFICOS_NOME = propriedades.getNomeGraficos();
	public static final int GRAFICOS_LARGURA = propriedades.getLarguraGraficos();
	public static final int GRAFICOS_ALTURA = propriedades.getAlturaGraficos();
	public static final boolean PLOTAR_GRAFICOS = propriedades.getPlotarGraficos();
	
	public static final String ARQUIVO_VAZAO = propriedades.getArquivoVazao();
	
	/**
	 * Cria uma assinatura padão para um peer.
	 * Uma assinatura padrão é composta de zeros.
	 * 
	 * @return
	 */
	public static String criarAssinatura() {
		char[] assinatura = new char[BLOCOS];
		
		// assinatura padrão
		for (int i = 0; i < BLOCOS; i++) {
			assinatura[i] = '0';
		}
		
		return String.valueOf(assinatura);
	}
	
	/**
	 * Cria uma assinatura diferenciada para um peer.
	 * Uma assinatura diferenciada já vem com os blocos iniciais setados.
	 * 
	 * @return
	 */
	public static String criarAssinaturaDiferenciada() {
		char[] assinatura = new char[BLOCOS];
		
		for (int i = 0; i < BLOCOS_INICIAIS_SISTEMA; i++) {
			assinatura[i] = '1';
		}
		
		for (int i = BLOCOS_INICIAIS_SISTEMA; i < BLOCOS; i++) {
			assinatura[i] = '0';
		}
		
		return String.valueOf(assinatura);
	}

}
